"""
写一个程序来查找从最高点到底部任意处结束的路径，使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。

          7
        3  8
     8   1   0
  2   7   4    4
4   5   2   6    5

在上面的样例中，从 7→3→8→7→5 的路径产生了最大权值。

输入格式
    第一个行一个正整数 r，表示行的数目。

    后面每行为这个数字金字塔特定行包含的整数。

输出格式
    单独的一行,包含那个可能得到的最大的和。

输入输出样例
    输入
        5
        7
        3 8
        8 1 0
        2 7 4 4
        4 5 2 6 5
    输出
        30
"""
r = int(input())
triangle = [list(map(int, input().split())) for _ in range(r)]

# 从倒数第二层开始向上遍历
for i in range(r-2, -1, -1):
    for j in range(len(triangle[i])):
        # 当前值 + 下一层左右较大值
        triangle[i][j] += max(triangle[i+1][j], triangle[i+1][j+1])

print(triangle[0][0])
